﻿Imports System.Data
Imports CondorTravel.BC
Imports CondorTravel.BE
Imports CondorTravelUTIL.DL
Public Class AdministrarServicios
    'Inherits System.Web.UI.Page
    Inherits PaginaBase




    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not Page.IsPostBack Then

            IniciliazaSesiones()
            btnCancelar.Visible = False

            If Session("SolicitudServicio") = "" Or Session("ProveedorCodigo") = "" Then

                CargarUnidades()
                CargarTipoServicio()
                CargarPais()
                CargarTarifas()
                CrearTablaTemporal()

            End If

            If Session("TipoEventoServicio") = 1 Then ' Modificar
                dgDistribucion.Columns(0).Visible = False
                lblTitulo.Text = "Modificar Servicio"
                CargarCabecera()
            Else
                dgDistribucion.Columns(0).Visible = False
                lblTitulo.Text = "Nuevo Servicio"
            End If

        End If


        If My.Request.Params("__EVENTTARGET") = "MiFuncion" Then
            If Not Session("ActivarModificacion") = 1 Then
                CargarDatosProveedor()
            End If

        End If

        If My.Request.Params("__EVENTTARGET") = "MiFuncionServicios" Then
            CargarDatosServicio()
        End If

    End Sub



    Public Sub CargarCabecera()


        Dim objServicio As List(Of ServicioBE)
        Dim objServicioBE As New ServicioBE
        Dim objServicioBC As New ServicioBC
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty


        objServicioBE.CodServicio = Session("CodigoServicio")
        objServicio = objServicioBC.ListarCabeceraServicioList(objServicioBE, bExito, sMensaje)

        If bExito Then
            txtCodSolicitud.Text = objServicio.Item(0).CodSolicitudServicio
            txtDescripcion.Text = objServicio.Item(0).NombreSolicitudServicio
            txtNombreServicio.Text = objServicio.Item(0).NombreServicio
            cboTipoServicio.SelectedValue = objServicio.Item(0).CodTipoServicio
            cboUnidad.SelectedValue = objServicio.Item(0).Unidad
            txtProveedorSolicitud.Text = objServicio.Item(0).ProveedorSolicitud
            CargarDetalleSolicitud()
        End If

    End Sub


    Public Sub CargarDetalleSolicitud()

        Dim dtDetalle As New DataTable
        Dim dt As DataTable
        Dim i As Integer
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty
        Dim objServiciosBE As New ServicioBE
        objServiciosBE.CodServicio = Session("CodigoServicio")

        Dim objServicio As New ServicioBC
        dgDistribucion.DataSource = objServicio.ListarDetalleServicioList(objServiciosBE, dtDetalle, bExito, sMensaje)
        dgDistribucion.DataBind()


        If dtDetalle.Rows.Count > 0 Then

            dt = Session("tbDistribucion")

            Do While i < dtDetalle.Rows.Count

                Dim dRow As DataRow = dt.NewRow

                dRow("CodTarifaServProv") = dtDetalle.Rows(i).Item(0).ToString
                dRow("codPais") = dtDetalle.Rows(i).Item(2).ToString
                dRow("descripcionPais") = dtDetalle.Rows(i).Item(3).ToString
                dRow("codCiudad") = dtDetalle.Rows(i).Item(4).ToString
                dRow("descripcionCiudad") = dtDetalle.Rows(i).Item(5).ToString
                dRow("CodProveedor") = dtDetalle.Rows(i).Item(6).ToString
                dRow("DesProveedor") = dtDetalle.Rows(i).Item(7).ToString
                dRow("codTipoTarifa") = dtDetalle.Rows(i).Item(9).ToString
                dRow("DescTipoTarifa") = dtDetalle.Rows(i).Item(10).ToString
                dRow("Tarifa") = CType(dtDetalle.Rows(i).Item(11).ToString, Double)
                dRow("EstadoTarServProv") = dtDetalle.Rows(i).Item(12).ToString


                dt.Rows.Add(dRow)
                Session("tbDistribucion") = dt
                i = i + 1
            Loop

        End If


    End Sub


    Public Sub IniciliazaSesiones()

        ' Proveedor
        Session("BPCodigoProveedor") = Nothing
        Session("BPRazonSocialProveedor") = Nothing
        Session("BPRUCProveedor") = Nothing

        'Servicio

        Session("BSSCodigoSolicitud") = Nothing
        Session("BSSNombreSolicitud") = Nothing
        Session("BSSProveedorSolicitud") = Nothing

        'Tablas
        Session("tbDistribucion") = Nothing
    End Sub

    Public Sub CargarUnidades()

        Dim listUnidadBE As List(Of UnidadBE) = New List(Of UnidadBE)
        Dim objUnidadBC As UnidadBC = New UnidadBC()

        Dim objUnidadSeleccione As UnidadBE = New UnidadBE
        objUnidadSeleccione.Codigo = 0
        objUnidadSeleccione.Descripcion = "[Seleccione]"
        listUnidadBE.Add(objUnidadSeleccione)

        listUnidadBE.AddRange(objUnidadBC.UnidadListar())

        cboUnidad.DataSource = listUnidadBE
        cboUnidad.DataValueField = "Codigo"
        cboUnidad.DataTextField = "Descripcion"
        cboUnidad.DataBind()

    End Sub

    Public Sub CargarTipoServicio()

        Dim listTipoServicioBE As List(Of TipoServicioBE) = New List(Of TipoServicioBE)
        Dim objTipoServivioBC As TipoServicioBC = New TipoServicioBC()

        Dim objTipoServSeleccione As TipoServicioBE = New TipoServicioBE
        objTipoServSeleccione.Codigo = 0
        objTipoServSeleccione.Nombre = "[Seleccione]"
        listTipoServicioBE.Add(objTipoServSeleccione)

        listTipoServicioBE.AddRange(objTipoServivioBC.TipoServicioListar())

        cboTipoServicio.DataSource = listTipoServicioBE
        cboTipoServicio.DataValueField = "Codigo"
        cboTipoServicio.DataTextField = "Nombre"
        cboTipoServicio.DataBind()
    End Sub

    Public Sub CargarPais()

        Dim listPaisBE As List(Of PaisBE) = New List(Of PaisBE)
        Dim objPaisBC As PaisBC = New PaisBC()

        Dim objPaisSeleccione As PaisBE = New PaisBE
        objPaisSeleccione.Codigo = 0
        objPaisSeleccione.Descripcion = "[Seleccione]"
        listPaisBE.Add(objPaisSeleccione)

        listPaisBE.AddRange(objPaisBC.ListarPais())

        cboPais.DataSource = listPaisBE
        cboPais.DataValueField = "Codigo"
        cboPais.DataTextField = "Descripcion"
        cboPais.DataBind()
    End Sub

    Public Sub CargarTarifas()

        Dim listTarifaBE As List(Of TarifaBE) = New List(Of TarifaBE)
        Dim objTarifaBC As TarifaBC = New TarifaBC()

        Dim objTarifaSeleccione As TarifaBE = New TarifaBE
        objTarifaSeleccione.Codigo = 0
        objTarifaSeleccione.Descripcion = "[Seleccione]"
        listTarifaBE.Add(objTarifaSeleccione)

        listTarifaBE.AddRange(objTarifaBC.ListarPais())

        cboTarifa.DataSource = listTarifaBE
        cboTarifa.DataValueField = "Codigo"
        cboTarifa.DataTextField = "Descripcion"
        cboTarifa.DataBind()
    End Sub

    Public Sub CrearTablaTemporal()

        Dim dt As New DataTable
        dt.Columns.Add("CodTarifaServProv")
        dt.Columns.Add("codPais")
        dt.Columns.Add("descripcionPais")
        dt.Columns.Add("codCiudad")
        dt.Columns.Add("descripcionCiudad")
        dt.Columns.Add("CodProveedor")
        dt.Columns.Add("DesProveedor")
        dt.Columns.Add("codTipoTarifa")
        dt.Columns.Add("DescTipoTarifa")
        dt.Columns.Add("Tarifa").DataType = System.Type.GetType("System.Object")
        dt.Columns.Add("EstadoTarServProv")

        Session("tbDistribucion") = dt

    End Sub

    Public Sub CargarDatosProveedor()

        If Session("BPCodigoProveedor") = Nothing Then
            txtCodProveedor.Text = String.Empty
        Else
            txtCodProveedor.Text = Session("BPCodigoProveedor")
            txtRazonSocial.Text = Session("BPRazonSocialProveedor")
        End If

    End Sub

    Public Sub CargarDatosServicio()

        If Session("BSSCodigoSolicitud") = Nothing Then
            txtCodSolicitud.Text = String.Empty
        Else
            txtCodSolicitud.Text = Session("BSSCodigoSolicitud")
            txtDescripcion.Text = Session("BSSNombreSolicitud")
            txtProveedorSolicitud.Text = Session("BSSProveedorSolicitud")
        End If


    End Sub

    Protected Sub cboPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboPais.SelectedIndexChanged

        Dim listCiudadBE As List(Of CiudadBE) = New List(Of CiudadBE)
        Dim objCiudadBC As CiudadBC = New CiudadBC()

        Dim objCiudadSeleccione As CiudadBE = New CiudadBE
        objCiudadSeleccione.Codigo = 0
        objCiudadSeleccione.Descripcion = "[Seleccione]"
        listCiudadBE.Add(objCiudadSeleccione)

        Dim objPaisBE As New PaisBE
        objPaisBE.Codigo = cboPais.SelectedValue

        listCiudadBE.AddRange(objCiudadBC.ListarCiudad(objPaisBE))

        cboCiudad.DataSource = listCiudadBE
        cboCiudad.DataValueField = "Codigo"
        cboCiudad.DataTextField = "Descripcion"
        cboCiudad.DataBind()

    End Sub

    Public Sub ObtenerCiudad(ByVal iPais As Integer)

        Dim listCiudadBE As List(Of CiudadBE) = New List(Of CiudadBE)
        Dim objCiudadBC As CiudadBC = New CiudadBC()
        Dim objPaisBE As New PaisBE
        objPaisBE.Codigo = iPais

        listCiudadBE.AddRange(objCiudadBC.ListarCiudad(objPaisBE))

        cboCiudad.DataSource = listCiudadBE
        cboCiudad.DataValueField = "Codigo"
        cboCiudad.DataTextField = "Descripcion"
        cboCiudad.DataBind()
    End Sub

    Protected Sub btnAgregar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAgregar.Click

        Try

            Dim drItem As DataRow
            Dim i As Integer = 0
            Dim dt As New DataTable
            Dim cZonas As Integer

            dt = Session("tbDistribucion")

            If cboPais.SelectedItem.Text = "[Seleccione]" Then
                Alerta("Seleccione el país.", False, String.Empty)
                'lblMensaje.Text = "Seleccione un país"
                Exit Sub
            ElseIf cboCiudad.SelectedItem.Text = "[Seleccione]" Then
                Alerta("Seleccione una ciudad.", False, String.Empty)
                'lblMensaje.Text = "Seleccione una ciudad"
                Exit Sub
            ElseIf txtCodProveedor.Text.Trim = "" Then
                Alerta("Ingrese el código del proveedor.", False, String.Empty)
                'lblMensaje.Text = "Ingrese el código del proveedor"
                Exit Sub
            ElseIf cboTarifa.SelectedItem.Text = "[Seleccione]" Then
                Alerta("Ingrese el tipo de tarifa.", False, String.Empty)
                'lblMensaje.Text = "Ingrese el tipo de tarifa"
                Exit Sub
            ElseIf txtTarifa.Text.Trim = "" Then
                Alerta("Ingrese la tarifa.", False, String.Empty)
                'lblMensaje.Text = "Ingrese la tarifa"
                Exit Sub
            ElseIf txtCodSolicitud.Text = "" Then
                Alerta("Debe seleccionar una solicitud de servicio como referencia.", False, String.Empty)
                'lblMensaje.Text = "Debe seleccionar una solicitud de servicio como referencia"
                Exit Sub
            End If

            If ValidarDatosProveedor() = False Then
                Alerta("ERROR: El codigo del proveedor no existe.", False, String.Empty)
                'lblMensaje.Text = "ERROR: El codigo del proveedor no existe"
                Exit Sub
            End If

            If Session("ActivarModificacion") = 1 Then
                ActualizarTarifa()
                Exit Sub
            End If

            If dt.Rows.Count > 0 Then

                Do While i < dt.Rows.Count
                    drItem = dt.Rows(i)

                    If (cboPais.SelectedValue = drItem.Item(1).ToString And cboCiudad.SelectedValue = drItem.Item(3).ToString And _
                         txtCodProveedor.Text = drItem.Item(5).ToString And cboTarifa.SelectedValue = drItem.Item(7).ToString) Then

                        If Session("TipoEventoServicio") = 1 Then ' Modificar
                            If Not dt.Rows(i).Item("EstadoTarServProv") = "E" Then
                                cZonas = cZonas + 1
                            End If
                        Else
                            cZonas = cZonas + 1
                        End If
                      

                    End If

                    i = i + 1
                Loop

                If cZonas = 0 Then
                    Dim dRow As DataRow = dt.NewRow
                    dRow("CodTarifaServProv") = Date.Now.Day & Date.Now.Hour & Date.Now.Minute & Date.Now.Second
                    dRow("codPais") = cboPais.SelectedValue
                    dRow("descripcionPais") = cboPais.SelectedItem
                    dRow("codCiudad") = cboCiudad.SelectedValue
                    dRow("descripcionCiudad") = cboCiudad.SelectedItem
                    dRow("CodProveedor") = txtCodProveedor.Text
                    dRow("DesProveedor") = txtRazonSocial.Text
                    dRow("codTipoTarifa") = cboTarifa.SelectedValue
                    dRow("DescTipoTarifa") = cboTarifa.SelectedItem
                    dRow("Tarifa") = CType(txtTarifa.Text, Double)
                    '..........................................................
                    If Session("TipoEventoServicio") = 1 Then ' Modificar
                        dRow("EstadoTarServProv") = "N" 'Registro Nuevo
                    Else
                        dRow("EstadoTarServProv") = "0" 'Registro Nuevo
                    End If
                    '..........................................................
                    dt.Rows.Add(dRow)

                    Session("tbDistribucion") = dt
                    Me.dgDistribucion.DataSource = SelectDataTable(dt, "EstadoTarServProv <> 'E'", "")
                    Me.dgDistribucion.DataBind()
                    lblMensaje.Text = ""
                    Exit Sub
                Else
                    Alerta("ERROR: Ya se ingreso la misma distribución.", False, String.Empty)
                    'lblMensaje.Text = "ERROR: Ya se ingreso la misma distribución"
                    Exit Sub
                End If

            Else
                Dim dRow As DataRow = dt.NewRow
                dRow("CodTarifaServProv") = Date.Now.Day & Date.Now.Hour & Date.Now.Minute & Date.Now.Second
                dRow("codPais") = cboPais.SelectedValue
                dRow("codPais") = cboPais.SelectedValue
                dRow("descripcionPais") = cboPais.SelectedItem
                dRow("codCiudad") = cboCiudad.SelectedValue
                dRow("descripcionCiudad") = cboCiudad.SelectedItem
                dRow("CodProveedor") = txtCodProveedor.Text
                dRow("DesProveedor") = txtRazonSocial.Text
                dRow("codTipoTarifa") = cboTarifa.SelectedValue
                dRow("DescTipoTarifa") = cboTarifa.SelectedItem
                dRow("Tarifa") = CDbl(txtTarifa.Text)
                '..........................................................
                If Session("TipoEventoServicio") = 1 Then ' Modificar
                    dRow("EstadoTarServProv") = "N" 'Registro Nuevo
                Else
                    dRow("EstadoTarServProv") = "0" 'Registro Nuevo
                End If
                '..........................................................
                dt.Rows.Add(dRow)

                Session("tbDistribucion") = dt
                Me.dgDistribucion.DataSource = SelectDataTable(dt, "EstadoTarServProv <> 'E'", "")
                Me.dgDistribucion.DataBind()
                lblMensaje.Text = ""

            End If


        Catch ex As Exception
            ex.Message.ToString()
        End Try

    End Sub

    Public Function ValidarDatosProveedor() As Boolean

        Dim objProveedorBE As New ProveedorBE
        Dim objProveedorBC As New ProveedorBC
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        objProveedorBE.Codigo = txtCodProveedor.Text.Trim
        objProveedorBC.ValidarProveedorListar(objProveedorBE, bExito, sMensaje)

        Return bExito

    End Function

    Public Function ValidarSolicitudServicio() As Boolean

        Dim objSolicitudServBE As New SolicitudServicioBE
        Dim objSolicitudServBC As New SolicitudServicioBC
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty
        Dim objUtil As New Funciones

        objSolicitudServBE.CodSolicitud = Val(objUtil.ReemplazarTexto(txtCodSolicitud.Text.Trim))

        objSolicitudServBC.ValidarSolicitudServicio(objSolicitudServBE, bExito, sMensaje)

        Return bExito

    End Function

    Private Sub dgZonaDistribucion_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles dgDistribucion.RowCommand

        Dim intCodigo As String = e.CommandArgument

        Select Case e.CommandName

            Case "Eliminar"

                If Session("TipoEventoServicio") = 1 Then ' Modificar
                    Eliminar_OpcionModificar(intCodigo)
                Else
                    Eliminar_OpcionNuevo(intCodigo)
                End If

            Case "Editar"
                Dim dt As New DataTable
                Dim dtSel As New DataTable
                dt = Session("tbDistribucion")
                dtSel = SelectDataTable(dt, "CodTarifaServProv = " & intCodigo, "CodTarifaServProv DESC")
                ActivarControles(False)
                btnCancelar.Visible = True

                txtCodDistribucion.Text = intCodigo
                cboPais.SelectedValue = dtSel.Rows(0).Item("codPais").ToString
                ObtenerCiudad(cboPais.SelectedValue)
                cboCiudad.SelectedValue = dtSel.Rows(0).Item("codCiudad").ToString
                txtCodProveedor.Text = dtSel.Rows(0).Item("CodProveedor").ToString
                txtRazonSocial.Text = dtSel.Rows(0).Item("DesProveedor").ToString
                cboTarifa.SelectedValue = dtSel.Rows(0).Item("codTipoTarifa").ToString
                txtTarifa.Text = CType(dtSel.Rows(0).Item("Tarifa").ToString, Double)

                Session("ActivarModificacion") = 1


        End Select

    End Sub

    Public Sub ActivarControles(ByVal Tipo As Boolean)
        cboPais.Enabled = Tipo
        cboCiudad.Enabled = Tipo
        'txtCodProveedor.Enabled = Tipo
        'txtRazonSocial.Enabled = Tipo
        cboTarifa.Enabled = Tipo
    End Sub

    Public Sub ActualizarTarifa()

        Try
            Dim i As Integer = 0
            Dim dt As New DataTable
            dt = Session("tbDistribucion")

            If dt.Rows.Count > 0 Then

                Do While i < dt.Rows.Count

                    If dt.Rows(i).Item("CodTarifaServProv").ToString = CType(txtCodDistribucion.Text.Trim, String) Then
                        dt.Rows(i).Item("Tarifa") = CType(txtTarifa.Text, Double)
                        dt.Rows(i).Item("EstadoTarServProv") = "U"
                        dgDistribucion.DataSource = dt
                        dgDistribucion.DataBind()
                    End If
                    i = i + 1
                Loop
            End If

            ActivarControles(True)
            btnCancelar.Visible = False
            LimpiarDetalleDistribucion()

        Catch ex As Exception
            ex.Message.ToString()
        End Try

    End Sub

    Public Sub LimpiarDetalleDistribucion()

        txtCodDistribucion.Text = String.Empty
        cboPais.SelectedIndex = 0
        cboCiudad.SelectedItem.Text = ""
        txtCodProveedor.Text = String.Empty
        txtRazonSocial.Text = String.Empty
        txtTarifa.Text = String.Empty
        cboTarifa.SelectedIndex = 0

        Session("ActivarModificacion") = Nothing

    End Sub

    Function SelectDataTable(ByVal dt As DataTable, ByVal filter As String, ByVal sort As String) As DataTable

        Dim rows As DataRow()
        Dim dtNew As DataTable
        dtNew = dt.Clone()
        rows = dt.Select(filter, sort)
        For Each dr As DataRow In rows
            dtNew.ImportRow(dr)
        Next
        Return dtNew

    End Function

    Private Sub Eliminar_OpcionModificar(ByVal intCodigo As String)


        Dim i As Integer = 0
        Dim rwEliminar As String
        Dim dt As New DataTable
        dt = Session("tbDistribucion")

        If dt.Rows.Count > 0 Then

            Do While i < dt.Rows.Count
                rwEliminar = dt.Rows(i).Item("codPais").ToString + "|" + dt.Rows(i).Item("codCiudad").ToString + "|" + dt.Rows(i).Item("codProveedor").ToString + "|" + dt.Rows(i).Item("DescTipoTarifa").ToString + "|" + dt.Rows(i).Item("Tarifa").ToString + "|" + dt.Rows(i).Item("EstadoTarServProv").ToString

                If rwEliminar = CType(intCodigo, String) Then

                    If dt.Rows(i).Item("EstadoTarServProv") = "N" Then ' si es nuevo se elimina definitivamnete
                        dgDistribucion.Rows(i).Visible = False
                        dt.Rows.Remove(dt.Rows(i))
                        Me.dgDistribucion.DataSource = SelectDataTable(dt, "EstadoTarServProv <> 'E'", "")
                        Me.dgDistribucion.DataBind()
                        'ElseIf dt.Rows(i).Item("EstadoTarServProv") = "C" Then

                    Else
                        dt.Rows(i).Item("EstadoTarServProv") = "E" 'Eliminacion 
                        dgDistribucion.Rows(i).Visible = False
                        Me.dgDistribucion.DataSource = SelectDataTable(dt, "EstadoTarServProv <> 'E'", "")
                        Me.dgDistribucion.DataBind()
                        'dt.Rows.RemoveAt(i)
                        'dt.Rows.Remove(dt.Rows(i))
                    End If
                 
                End If

                i = i + 1
            Loop

        End If

        'dgDistribucion.DataSource = dt
        'dgDistribucion.DataBind()

    End Sub

    Private Sub Eliminar_OpcionNuevo(ByVal intCodigo As String)

        Dim i As Integer = 0
        Dim rwEliminar As String
        Dim dt As New DataTable
        dt = Session("tbDistribucion")

        If dt.Rows.Count > 0 Then

            Do While i < dt.Rows.Count
                rwEliminar = dt.Rows(i).Item("codPais").ToString + "|" + dt.Rows(i).Item("codCiudad").ToString + "|" + dt.Rows(i).Item("codProveedor").ToString + "|" + dt.Rows(i).Item("DescTipoTarifa").ToString + "|" + dt.Rows(i).Item("Tarifa").ToString + "|" + dt.Rows(i).Item("EstadoTarServProv").ToString

                If rwEliminar = CType(intCodigo, String) Then
                    dgDistribucion.Rows(i).Visible = False
                    dt.Rows.Remove(dt.Rows(i))
                End If

                i = i + 1
            Loop

        End If

        dgDistribucion.DataSource = dt
        dgDistribucion.DataBind()

    End Sub

  
    Protected Sub btnRegresar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRegresar.Click
        Response.Redirect("ConsultarServicios.aspx", True)
    End Sub

    Protected Sub btnGrabar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGrabar.Click
        Try
            
            If Session("TipoEventoServicio") = 1 Then ' Modificar
                Modificar()
            Else
                Nuevo()
            End If

        Catch ex As Exception
            ex.Message.ToString()
        End Try

    End Sub


    Public Sub Modificar()

        Try
            ModificarCabecera()
        Catch ex As Exception

        End Try

    End Sub

    Public Sub ModificarCabecera()

        Try
            Dim objUtil As New Funciones
            Dim objServicioBE As ServicioBE
            Dim objServicioBC As ServicioBC
            Dim iUnidad As Integer = cboUnidad.SelectedValue
            Dim iTipoServicio As Integer = cboTipoServicio.SelectedValue
            Dim strNombreServicio As String = txtNombreServicio.Text.Trim
            Dim iCodSolicitud As Integer = Val(objUtil.ReemplazarTexto(txtCodSolicitud.Text.Trim))
            Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario
            Dim bExito As Boolean = False
            Dim sMensaje As String = String.Empty

            objServicioBE = New ServicioBE
            objServicioBE.CodServicio = Session("CodigoServicio")
            objServicioBE.Unidad = iUnidad
            objServicioBE.CodTipoServicio = iTipoServicio
            objServicioBE.NombreServicio = Replace(Replace(strNombreServicio, "'", ""), ",", "/")
            objServicioBE.CodSolicitudServicio = iCodSolicitud
            objServicioBE.UsuarioCreador = strUsuario

            ' Validar que exist por lo menos una zona de distribucion
            Dim dt As New DataTable
            Dim i As Integer
            Dim iContador As Integer
            '-------------------------------------------------------------------------------------------

            dt = Session("tbDistribucion")
            If dt.Rows.Count = 0 Then
                Alerta("ERROR: Debe ingresar por lo menos una zona de distribución.", False, String.Empty)
                Exit Sub
            End If

            '-------------------------------------------------------------------------------------------

            If dt.Rows.Count > 0 Then
                Do While i < dt.Rows.Count
                    If dt.Rows(i).Item("EstadoTarServProv") <> "E" Then
                        iContador = iContador + 1
                    End If
                    i = i + 1
                Loop

            End If

            If iContador = 0 Then ' si existe por lo menos uno 
                Alerta("ERROR: Debe ingresar por lo menos una zona de distribución.", False, String.Empty)
                Exit Sub
            End If

            '-------------------------------------------------------------------------------------------


            objServicioBC = New ServicioBC
            objServicioBC.ModificaCabeceraServicio(objServicioBE, bExito, sMensaje)

            If bExito = False Then
                Alerta("Error: Hubieron problemas al modificar el servicio.", False, String.Empty)
                'lblMensaje.Text = "Error: Hubieron problemas al modificar el servicio."
                Exit Sub
            Else
                ModificarDetalle()
            End If

        Catch ex As Exception

        End Try

    End Sub

    Public Sub ModificarDetalle()

        Dim objUtil As New Funciones
        Dim objServicioBE As ServicioBE
        Dim objServicioBC As ServicioBC
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty
        Dim i As Integer = 0
        Dim iError As Integer
        Dim dt As New DataTable
        dt = Session("tbDistribucion")


        If dt.Rows.Count > 0 Then

            Do While i < dt.Rows.Count

                objServicioBE = New ServicioBE
                objServicioBE.CodServicio = Session("CodigoServicio")
                objServicioBE.CodTarifaServProv = dt.Rows(i).Item("CodTarifaServProv").ToString()
                objServicioBE.codPais = dt.Rows(i).Item("codPais").ToString()
                objServicioBE.codCiudad = dt.Rows(i).Item("codCiudad").ToString()
                objServicioBE.CodProveedor = dt.Rows(i).Item("CodProveedor").ToString()
                objServicioBE.codTipoTarifa = dt.Rows(i).Item("codTipoTarifa").ToString()
                objServicioBE.Tarifa = CType(dt.Rows(i).Item("Tarifa").ToString(), Double)
                objServicioBE.EstadoTarServProv = dt.Rows(i).Item("EstadoTarServProv").ToString()
                objServicioBE.UsuarioCreador = CType(Session("usuario"), UsuariosBE).CodUsuario

                objServicioBC = New ServicioBC

                If Not dt.Rows(i).Item("EstadoTarServProv").ToString() = "T" Then 'si no ha sido modificado (Estado = Activo)
                    objServicioBC.ModificaDetalleServicio(objServicioBE, bExito, sMensaje)
                Else
                    bExito = True
                End If

                If bExito = False Then
                    iError = iError + 1
                End If
                i = i + 1
            Loop

            If Not iError = 0 Then
                Alerta("Error: Hubieron problemas al modificar la distribuciòn del servicio.", False, String.Empty)
                'lblMensaje.Text = "Error: Hubieron problemas al modificar la distribuciòn del servicio."
                Exit Sub
            Else
                Alerta("Se modifico el servicio con exito..", True, "ConsultarServicios.aspx")
                'lblMensaje.Text = "Se modifico el servicio con exito."
                limpiarCampos()
            End If


        End If

    End Sub

    Public Sub Nuevo()

        Try

            Dim iCodigoServicio As Integer
            Dim objUtil As New Funciones
            Dim dt As New DataTable
            Dim dtDet As DataTable
            Dim dtDet2 As DataTable
            Dim i As Integer
            dt = Session("tbDistribucion")

            Dim objServicioBE As ServicioBE
            Dim objServicioBC As ServicioBC
            Dim bExito As Boolean = False
            Dim sMensaje As String = String.Empty


            ' Validaciones

            If txtCodSolicitud.Text = String.Empty Then
                Alerta("Faltan ingresar el código de solicitud de referencia.", False, String.Empty)
                'lblMensaje.Text = "Faltan ingresar el código de solicitud de referencia"
                Exit Sub
            ElseIf txtNombreServicio.Text = String.Empty Then
                Alerta("Faltan ingresar el nombre del servicio.", False, String.Empty)
                'lblMensaje.Text = "Faltan ingresar Nombre del servicio"
                Exit Sub
            ElseIf cboTipoServicio.SelectedItem.Text = "[Seleccione]" Then
                Alerta("Seleccione el Tipo de Servicio de Servicio.", False, String.Empty)
                'lblMensaje.Text = "Seleccione el Tipo de Servicio de Servicio"
                Exit Sub
            ElseIf cboUnidad.SelectedItem.Text = "[Seleccione]" Then
                Alerta("Seleccione la Unidad de Servicio.", False, String.Empty)
                'lblMensaje.Text = "Seleccione la Unidad de Servicio"
                Exit Sub
            End If

            If dt.Rows.Count = 0 Then
                Alerta("Faltan agregar las zonas de distribucion.", False, String.Empty)
                'lblMensaje.Text = "Faltan agregar las zonas de distribucion"
                Exit Sub
            End If

            If ValidarSolicitudServicio() = False Then
                Alerta("ERROR: Solicitud de Servicio no existe.", False, String.Empty)
                'lblMensaje.Text = "ERROR: Solicitud de Servicio no existe"
                Exit Sub
            End If

            ' Validar que exist por lo menos una zona de distribucion

            If dt.Rows.Count = 0 Then
                Alerta("ERROR: Debe ingresar por lo menos una zona de distribución.", False, String.Empty)
                Exit Sub
            End If


            'Declarar datos a ingresar 
            '-----------------------------------------------------------
            'Ingreso de Servicio

            Dim iUnidad As Integer = cboUnidad.SelectedValue
            Dim iTipoServicio As Integer = cboTipoServicio.SelectedValue
            Dim strNombreServicio As String = txtNombreServicio.Text.Trim
            Dim iCodSolicitud As Integer = Val(objUtil.ReemplazarTexto(txtCodSolicitud.Text.Trim))
            Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario


            objServicioBE = New ServicioBE
            objServicioBE.Unidad = iUnidad
            objServicioBE.TipoServicio = iTipoServicio
            objServicioBE.NombreServicio = Replace(Replace(strNombreServicio, "'", ""), ",", "/")
            objServicioBE.CodSolicitudServicio = iCodSolicitud
            objServicioBE.UsuarioCreador = strUsuario

            objServicioBC = New ServicioBC
            objServicioBC.InsertarServicio(objServicioBE, iCodigoServicio, bExito, sMensaje)

            If bExito = False Then
                Alerta("Error: Hubieron problemas al ingresar el servicio.", False, String.Empty)
                lblMensaje.Text = "Error: Hubieron problemas al ingresar el servicio."
                Exit Sub
            End If

            '---------------------------------------------------------------------------------------------
            'Ingreso de detalle Servicio 
            '---------------------------------------------------------------------------------------------

            dtDet = SelectDistinct(dt, "codProveedor")
            Dim ii As Integer
            Dim drItem0 As DataRow
            Dim iCodPrv As Integer

            If dtDet.Rows.Count > 0 Then
                Do While ii < dtDet.Rows.Count
                    drItem0 = dtDet.Rows(ii)
                    iCodPrv = CType(drItem0.Item("codProveedor").ToString, Integer)

                    objServicioBE = New ServicioBE
                    objServicioBE.CodProveedor = iCodPrv
                    objServicioBE.UsuarioCreador = strUsuario
                    objServicioBE.CodServicio = iCodigoServicio

                    objServicioBC = New ServicioBC
                    objServicioBC.InsertarDetalleServicio(objServicioBE, bExito, sMensaje)
                    ii = ii + 1
                Loop

            End If


            If bExito = False Then
                Alerta("Error: Hubieron problemas al ingresar el servicio.", False, String.Empty)
                'lblMensaje.Text = "Error: Hubieron problemas al ingresar el servicio."
                Exit Sub
            End If

            '---------------------------------------------------------------------------------------------
            'Ingreso de detalle distribucion Servicio Proveedor 
            '---------------------------------------------------------------------------------------------

            dtDet2 = dt.DefaultView.ToTable(True, "codProveedor", "codCiudad")

            Dim iii As Integer
            Dim drItem2 As DataRow
            Dim iCodCiudad As Integer
            Dim iCodPrv2 As Integer

            If dtDet2.Rows.Count > 0 Then
                Do While iii < dtDet2.Rows.Count
                    drItem2 = dtDet2.Rows(iii)
                    iCodCiudad = CType(drItem2.Item("codCiudad").ToString, Integer)
                    iCodPrv2 = CType(drItem2.Item("codProveedor").ToString, Integer)

                    objServicioBE = New ServicioBE
                    objServicioBE.codCiudad = iCodCiudad
                    objServicioBE.CodProveedor = iCodPrv2
                    objServicioBE.UsuarioCreador = strUsuario
                    objServicioBE.CodServicio = iCodigoServicio

                    objServicioBC = New ServicioBC
                    objServicioBC.InsertarDistribucionServicio(objServicioBE, bExito, sMensaje)
                    iii = iii + 1
                Loop

            End If


            If bExito = False Then
                Alerta("Error: Hubieron problemas al ingresar el servicio.", False, String.Empty)
                'lblMensaje.Text = "Error: Hubieron problemas al ingresar el servicio."
                Exit Sub
            End If


            '---------------------------------------------------------------------------------------------
            'Ingreso de Tarifas 
            '---------------------------------------------------------------------------------------------

            Dim drItem As DataRow
            Dim iCodProveedor As Integer
            Dim iTipoTarifa As Integer
            Dim dtarifa As Double

            If dt.Rows.Count > 0 Then

                Do While i < dt.Rows.Count
                    drItem = dt.Rows(i)
                    iCodProveedor = CType(drItem.Item("codProveedor").ToString, Integer)
                    iCodCiudad = CType(drItem.Item("codCiudad").ToString, Integer)
                    iTipoTarifa = CType(drItem.Item("codTipoTarifa").ToString, Integer)
                    dtarifa = CType(drItem.Item("Tarifa").ToString, Double)

                    objServicioBE = New ServicioBE
                    objServicioBE.CodProveedor = iCodProveedor
                    objServicioBE.codCiudad = iCodCiudad
                    objServicioBE.codTipoTarifa = iTipoTarifa
                    objServicioBE.Tarifa = dtarifa
                    objServicioBE.UsuarioCreador = strUsuario
                    objServicioBE.CodServicio = iCodigoServicio

                    objServicioBC = New ServicioBC
                    objServicioBC.InsertarTarifaServicio(objServicioBE, bExito, sMensaje)

                    i = i + 1

                Loop

            End If


            '---------------------------------------------------------------------------------------------
            If bExito = False Then
                Alerta("Error: Hubieron problemas al ingresar el servicio.", False, String.Empty)
                'lblMensaje.Text = "Error: Hubieron problemas al ingresar el servicio."
                Exit Sub
            Else
                Alerta("El registro fue ingresado con exito.", True, "ConsultarServicios.aspx")
                'lblMensaje.Text = "El registro fue ingresado con exito."
                limpiarCampos()
                CrearTablaTemporal()
                txtCodSolicitud.Focus()
            End If


        Catch ex As Exception

        End Try

    End Sub

    Public Function SelectDistinct(ByVal tabla As DataTable, ByVal columna As String) As DataTable
        Dim resultado As New DataTable()
        Try
            resultado.Columns.Add(columna, tabla.Columns(columna).DataType)
            Dim ht As Hashtable = New Hashtable()
            For Each dr As DataRow In tabla.Rows
                If (Not (ht.ContainsKey(dr(columna)))) Then
                    ht.Add(dr(columna), New Object)
                    Dim nuevaFila As DataRow = resultado.NewRow()
                    nuevaFila(columna) = dr(columna)
                    resultado.Rows.Add(nuevaFila)
                End If
            Next
            Return resultado
        Catch ex As Exception
            Return New DataTable()
        Finally
            resultado.Dispose()
        End Try
    End Function

    Public Sub limpiarCampos()

        txtCodSolicitud.Text = String.Empty
        txtDescripcion.Text = String.Empty
        txtNombreServicio.Text = String.Empty
        cboUnidad.SelectedIndex = 0
        cboTipoServicio.SelectedIndex = 0
        cboPais.SelectedIndex = 0
        cboCiudad.SelectedIndex = 0
        txtCodProveedor.Text = String.Empty
        txtRazonSocial.Text = String.Empty
        txtTarifa.Text = String.Empty
        txtProveedorSolicitud.Text = String.Empty
        cboTarifa.SelectedIndex = 0
        dgDistribucion.DataSource = Nothing
        dgDistribucion.DataBind()

        IniciliazaSesiones()


    End Sub

    Protected Sub txtCodProveedor_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles txtCodProveedor.TextChanged
        txtRazonSocial.Text = Session("ProveedorRazonSocial")
    End Sub


    Protected Sub btnCancelar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancelar.Click
        ActivarControles(True)
        LimpiarDetalleDistribucion()
        btnCancelar.Visible = False
    End Sub
End Class